package com.xiaoshuidi.cloud.module.contract.service.roommate;

import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.contract.controller.admin.roommate.vo.*;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractRoomDO;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.roommeta.ContractRoommateDO;

import java.time.LocalDate;
import java.util.Collection;
import java.util.List;

/**
 * 合同同住人数据 Service 接口
 *
 * @author test123
 */
public interface ContractRoommateService {

    /**
     * 创建合同同住人数据
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRoommate( ContractRoommateCreateReqVO createReqVO);

    /**
     * 更新合同同住人数据
     *
     * @param updateReqVO 更新信息
     */
    void updateRoommate( ContractRoommateUpdateReqVO updateReqVO);

    /**
     * 删除合同同住人数据
     *
     * @param id 编号
     */
    void deleteRoommate(Long id);

    /**
     * 获得合同同住人数据
     *
     * @param id 编号
     * @return 合同同住人数据
     */
    ContractRoommateRespVO getRoommate(Long id);

    /**
     * 获得合同同住人数据列表
     *
     * @param id 编号
     * @return 合同同住人数据列表
     */
    List<ContractRoommateDO> getRoommateList(Long id);

    /**
     * 批量导入同住人
     *
     * @param importUsers     导入用户列表
     * @param isUpdateSupport 是否支持更新
     * @return 导入结果
     */
    ContractRoommateImportRespVO importRoommateList(List<ContractRoommateImportExcelVO> importUsers, boolean isUpdateSupport);

    /**
     * 根据合同id查看同住人
     * @param contractId
     * @return
     */
    List<ContractRoommateListReqVO> getContractRoommateList(Long contractId);

    /**
     * 同住人退住
     * @param id 同住人id
     * @return
     */
    void roommateCheckout(Long id);

    /**
     * 企业入住人分页查询
     * @param pageReqVO
     * @return
     */
    PageResult<ContractRoommatePageRespVO> getRoommateListPage(ContractRoommatePageReqVO pageReqVO);

    /**
     * 批量迁出
     * @param ids
     */
    void getRoommateEmigration(Collection<Long> ids);
    /**
     * 设置寝室长
     * @param id
     */
    void changeRoommateType(Long id);
    /**
     * 企业入住人迁入迁出数据分页查询
     * @param pageReqVO
     * @return
     */
    PageResult<ContractRoommateLogListVO> getRoommateLogListPage(ContractRoommateLogPageReqVO pageReqVO);

    Boolean getOnlyOne(Long id);

    void roommateCheckoutCompany(Long id, Boolean isOne);

    /**
     * 条件查询同住人 Require
     * @param param
     * @return: java.util.List<com.xiaoshuidi.cloud.module.contract.dal.dataobject.roommeta.ContractRoommateDO>
     */
    List<ContractRoommateDO> getByParam(ContractRoommateDO param);


    /**
     * 根据会员号获取需要签署安全协议数据
     * @param memberNo
     * @return: java.util.List<com.xiaoshuidi.cloud.module.contract.dal.dataobject.roommeta.ContractRoommateDO>
     */
    List<ContractRoommateDO> getRequireSignSafeRoommateList(Long memberNo);

    /**
     * 更新同住人
     * @param update
     * @return: void
     */
    void updateRoommateById(ContractRoommateDO update);

    /**
     * 成功入住
     * @param param
     * @return: void
     */
    void checkInSuccess(ContractRoommateDO param);

    /**
     * 下发密码
     */
    void issuePassword(Long roomId, String userName, String phone, LocalDate startTime, LocalDate endTime, String nickName);

    /**
     * 同住人迁移
     * @param originalContractId
     * @param currentContractId
     * @param roomId
     * @return: void
     */
    void roommateTransfer(Long originalContractId, Long currentContractId, Long roomId);

    List<ContractRoommateDO>  getListByContractId(Long contractId);

    /**
     * 同步同住人数据到房源
     * @param contractRoomDO
     */
    void updateRoommateData( ContractRoomDO contractRoomDO);

    List<Long> getContractRoommateList(List<Long> contractId);

    /**
     * 退租批量迁出
     * @param ids
     */
    void refundRoommateEmigration(Collection<Long> ids);

    List<ContractRoommateDO> getAllCompanyCheckinRoom(Long memberId);

    void updateMemberUser(Long userId, String mobile, String userName, Long oldUserId);
}
